package com.atguigu.gmall.pms.config;

import com.zaxxer.hikari.HikariDataSource;
import io.seata.rm.datasource.DataSourceProxy;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


import javax.sql.DataSource;

@Configuration
public class DataSourceConfig {

    /**
     * 如果存在多个数据源的情况下需要将 DataSourceProxy 设置为主数据源，否则事务无法回滚
     * 由于HikariDataSource数据源中的四大配置有一个不一样，所以需要读取设置
     * SeaTa 要求每一个表格都要有主键用于设置日志记录
     * @param
     * @return The default datasource
     */
//    @Primary
//    @ConfigurationProperties(prefix = "spring.datasource")  这个注解的作用是将配置文件的信息设置到返回对象上，在这里是将配置设置到代理对象中
    @Bean("dataSource")
    public DataSource dataSource(@Value("${spring.datasource.driver-class-name}")String DriverClassName,
                                 @Value("${spring.datasource.url}")String url,
                                 @Value("${spring.datasource.username}")String username,
                                 @Value("${spring.datasource.password}")String password) {
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setDriverClassName(DriverClassName);
        dataSource.setJdbcUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return new DataSourceProxy(dataSource);
    }
}
